//
//  BDUtil.h
//  ProjectForBD
//
//  Created by Jaesun on 17/2/15.
//  Copyright © 2017年 S.J. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "Des.h"
#import "RcMD5.h"

#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>

#import <QuartzCore/QuartzCore.h>
#import <CommonCrypto/CommonDigest.h>
#import <CoreLocation/CoreLocation.h>

//#import "THUserInfoModel.h"

//typedef NS_ENUM(NSInteger,LanguageType) {
//    NSLanguageDefault = 0, // 默认本地化
//    NSLanguageChineese,  // 中文
//    NSLanguageEnglish,   // 英文
//    NSLanguageJapanese,  // 日文
//    NSLanguageGerman,    //德文
//    NSLanguageFrench,   //  法文
//    NSLanguageTraditionalChinese,   //繁体中文
//    
//};



#define ADD_SERVERS @"user_add_server_address" // 用户自己添加的服务器地址
#define USER_SERVER @"app_user_server_address" // 用户使用的自己添加的服务器地址
#define RECOMMEND_SERVER @"recommend_server_address" // 系统推荐使用的服务器地址
#define IS_USER_SElELECTED @"is_used_self_add_address" // 用户当前使用的是否为自己添加的服务器地址

#define USERINFO @"USERINFO"
#define USERACCOUT @"USERACCOUT"


@interface BDUtil : NSObject

#pragma mark- APP相关信息

#pragma mark-

#pragma mark APP版本号
/**
 *  获取版本号
 *
 *  @param hiddinBuild 是否显示budld号
 *
 *  @return 返回字符串
 */
+(NSString*)getVersion:(BOOL)hiddinBuild;


#pragma mark APP名字
/**
 *  获取APP名称
 */
+(NSString*)getAppName;

#pragma mark 新版本第一次启动APP

+ (BOOL)isAppFirstRunInCurVersion;

#pragma mark 语言相关

/**
 *  获取语言话文字
 *
 *  @return 返回文字
 */
+(NSString*)language:(NSString*)key;


#pragma mark- 服务器地址相关
#pragma mark-

/**
 *  获取当前使用的请求地址
 */
+(NSString*)getUsedHost;

/**
 *  获取APP推荐使用服务器地址
 */
+ (NSString*)getRecommendHost;

/**
 *  获取请求地址列表
 */
+ (NSMutableArray *)getHostList;

/**
 *  添加请求地址
 *
 *  @param host eg: http://www.hid.s:8080
 *
 *  @return 操作结果
 */
+(BOOL)addHost:(NSString*)host;

/**
 更改默认服务器地址
 */
+ (void)setRecommendHost:(NSString *)host;

/**
 *   当前用户使用的服务器地址
 *   @param host  eg: http://www.hid.s:8080
 */
+(BOOL)setUserHost:(NSString *)host;

/**
 *  删除服务器地址
 *
 *  @param index 删除数据下标
 *
 *  @return 操作结果
 */
+ (BOOL)deleteHostAtIndex:(NSInteger)index;

#pragma mark- 账号相关
/*用户是否登录*/
+(BOOL)isLogin;
/**
 *  注销
 */
+(void)removeAccount;
/**
 *  获取用户口令
 */
+ (NSString*)getKey;
/**
 *  保存账号密码(仅仅是账号密码)
 */
+ (void)saveAccountInfo:(NSDictionary*)accountDict;
/**
 *  保存账户信息 模型信息
 */
//+ (void)saveAccountModel:(THUserInfoModel*)userModel;
/**
 *  获取用户账号信息 模型信息
 */
//+ (THUserInfoModel*)getAccountInfo;
/**
 *  获取账号密码
 */
+ (NSDictionary*)getKeepAccout;

#pragma mark- 颜色相关

/**
 *  十六进制转色值
 @param stringToConvert  色值 eg:@"0x345322" @"ffffff"
 @param alpha 设置透明度0~1  [UIColor clearColor] 尽量少用
 */
+ (UIColor *)hexStringToColor: (NSString *) stringToConvert alpha:(CGFloat)alpha;

/**
 * 自定义RGB颜色值 0-255
 */
+ (UIColor*)rgbColor:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;

#pragma mark- 设备相关
/**
 * 获取设备型号
 */
+ (NSString*)getDeviceModel;

#pragma mark- JSON

/**
 *标准化json
 @param   responseObject 字典类型
 */
+ (NSDictionary*)formatJSON:(NSDictionary*)responseObject;

/**
 *json转字典
 @param   jsonString  标准json字符串
 */
+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString;
/**
 *当前时间和本地缓存时间差
 @param   Cachedate 本地缓存时间
 @return 多少秒
 */

#pragma mark- 加密、解密
/**
 *  字典DES加密成字符串
 *
 *  @param sourceDict 源字典
 *  @param bencrypt 是否加密
 *
 *  @return 加密结果
 */
+(NSString*)encryption:(NSMutableDictionary*)sourceDict encrypt:(BOOL)bencrypt;
/**
 *  加密字符串DES解密成字典
 *
 *  @param sourceString 源字符串
 *  @param bencrypt 是否解密
 *  @return 解密结果
 */
+(NSMutableDictionary*)decryption:(NSString*)sourceString encrypt:(BOOL)bencrypt;

#pragma mark- 日期相关


/**
 从一种个是的时间字符串转换为另一种时间格式的字符串

 @param inputDateStr 输入的时间字符串
 @param inputDateFormatter 希望的到的时间字符串格式
 @param outputDateFormatter 输出的时间字符串格式
 @return 输出的时间字符串
 */
+ (NSString *)dateString:(NSString *)inputDateStr fromDateFormatter:(NSString *)inputDateFormatter toDateFormatter:(NSString *)outputDateFormatter;


/**
 将时间字符串转换为时间

 @param dateStr 时间字符串
 @param formatter 时间格式
 @return 时间
 */
+ (NSDate *)dateWithString:(NSString *)dateStr formatter:(NSString *)formatter;

+ (NSString *)stringFromDate:(NSDate *)date withFormatter:(NSString *)dateFormatter ;

/**
 时间转化为时间戳

 @param theDate 时间
 @return 时间戳
 */
+ (NSString *)customTimestampWithDate:(NSDate *)theDate;
/**
 *标准时间指定格式时间转时间戳
 */
+(NSString*)dateToTimestamp;

#pragma mark- Frame相关
/**
 计算字符串高度
 
 @param string 字符串
 @param fontSize 字符size
 @return 字符串高度
 */
+ (CGFloat)heightForString:(NSString *)string width:(CGFloat)width fontSize:(CGFloat)fontSize;
/**
 计算字符串长度

 @param string 字符串
 @param fontSize 字符size
 @return 字符串长度
 */
+ (CGFloat)widthForString:(NSString *)string height:(CGFloat)height fontSize:(CGFloat)fontSize;

/**
 *返回范围 文本  最大范围 字号
 */
+ (CGSize)sizeWithString:(NSString *)string CGsize:(CGSize)size font:(UIFont *)font;

#pragma mark- 文件操作相关
/**
 *文件是否纯在
 @param filePath 文件路劲
 */
+ (BOOL)isExsitfile:(NSString*)filePath;

#pragma mark- Others

/**
 *去掉导航黑线
 */
+(UIImage*)clearBlackNavigation:(UIColor *)color;

+ (BOOL)isEmptyString:(NSString*)string;
+ (NSString*)clearSpace:(NSString *)str isends:(BOOL)is;
/**
 *字符串替换
 */
+ (NSString*)stringReplace:(NSString*)sourceString replace:(NSString*)replaceString target:(NSString*)targetString;
/**
 *字符串忽略大小写比较等值
 */
+ (BOOL)compareString:(NSString*)str1 compareString2:(NSString*)str2;
/**
 *str1字符串是否包含str2
 */
+(BOOL)compareString:(NSString*)str1 containCompareString2:(NSString*)str2;
/**
 *string 全部小写 lower yes
 */
+ (NSString*)compareLowercaseString:(NSString*)str1 isLower:(BOOL)lower;

+(void)showAlterwithMessage:(NSString *)str inVC:(UIViewController *)vc;

/**
 *判断是否为空值
 *有值 返回NO
 */
+(BOOL)DataIsNuLL:(NSString *)string;
/**
 *  数据字典转化成数据模型
 *
 *  @param dic   待转化字典
 *  @param model 目标模型
 *
 *  @return 转化结果
 */
+(id)dictionarytoModel:(NSDictionary*)dic targetModel:(id)model;

+ (NSString *)html5URLWithInterfaceStr:(NSString *)interfaceStr parametersDic:(NSDictionary *)parametersDic;

//是否是AppStore测试账号
+(BOOL) isAppStoreTestAccount;



@end





